﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Persistencia;
using GestorDeFlotasModelo.Factorias;
using Persistencia.Interfaces;

namespace GestorDeFlotasModelo.Entities
{
    public partial class Auto : IPersistibleModelo, IIdentityEntity
    {
        PersistibleDB persistible;
        #region Miembros de IPersistibleModelo

        void IPersistibleModelo.CargarParametrosClave(HashTableNCSensitive parameters)
        {
            parameters.Add("Auto_Id", this.Id);
        }

        void IPersistibleModelo.CargarParametrosNoClave(HashTableNCSensitive parameters)
        {
            parameters.Add("Auto_Marca", this.Marca);
            parameters.Add("Auto_Modelo", this.Modelo);
            parameters.Add("Auto_Patente", this.Patente);
            parameters.Add("Auto_Licencia", this.Licencia);
            parameters.Add("Auto_Rodado", this.Rodado);
            parameters.Add("Auto_Habilitado", this.Habilitado);
            parameters.Add("Auto_Reloj", this.Reloj.Id);
        }

        void IPersistibleModelo.Cargar(HashTableNCSensitive hts)
        {
            if(hts["Auto_Id"] != null)
                this.Id = Int64.Parse(hts["Auto_Id"].ToString());
            this.Marca = (hts["Auto_Marca"].ToString());
            this.Modelo = (hts["Auto_Modelo"].ToString());
            this.Patente = (hts["Auto_Patente"].ToString());
            this.Licencia = (hts["Auto_Licencia"].ToString());
            if(hts["Auto_Rodado"] != null)
                this.Rodado = (hts["Auto_Rodado"].ToString());
            if(hts["Auto_Habilitado"] !=null)
                this.Habilitado = bool.Parse(hts["Auto_Habilitado"].ToString());
            if (hts["Auto_Reloj"] != null)
                this.Reloj = ((IPersistibleModelo)this).Persistible.Transaccion.Factoria<FactoriaReloj>().SelectXId<Reloj>(hts["Auto_Reloj"].ToString());
            if (hts["Recaudacion"] != null)
                this.monto = double.Parse(hts["Recaudacion"].ToString());
        }

        void IPersistibleModelo.AntesInsert() { }

        void IPersistibleModelo.AntesUpdate() { }

        void IPersistibleModelo.AntesDelete() { }

        void IPersistibleModelo.DespuesInsert() { }

        void IPersistibleModelo.DespuesUpdate() { }

        void IPersistibleModelo.DespuesDelete() { }

        string IPersistibleModelo.HashDatos
        {
            get
            {
                return this.Id + 
                    this.Marca +
                    this.Modelo +
                    this.Patente +
                    this.Licencia +
                    this.Rodado +
                    this.Habilitado +
                    this.Reloj.Id;
            }
        }

        PersistibleDB IPersistibleModelo.Persistible
        {
            get
            {
                return this.persistible;
            }
            set
            {
                this.persistible = value;
            }
        }

        #endregion

        #region Miembros de IPersistible

        void IPersistible.Insert()
        {
            this.persistible.Insert();
        }

        void IPersistible.Update()
        {
            this.persistible.Update();
        }

        void IPersistible.Delete()
        {
            this.persistible.Delete();
        }

        #endregion

        #region Miembros de IIdentityFactory

        long IIdentityEntity.Id
        {
            get
            {
                return this.Id;
            }
            set
            {
               this.Id=value;
            }
        }

        #endregion
    }
}
